package com.hualian.ticket.controller;

import com.hualian.ticket.exception.BusinessException;
import com.hualian.ticket.util.JsonResult;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;

/** 异常处理总入口
 * @author 陈静
 * @date 2020/10/16 9:27
 */
@RestController
@ControllerAdvice
public class ExceptionController {
    JsonResult jsonResult = new JsonResult();

    @ExceptionHandler(Throwable.class)
    public Map hander(Exception e) {
        // 当业务层抛出异常时  格式是：
        // throw new BusinessException("注册手机号重复");
        // 业务层处理范围
        if (e instanceof BusinessException) {

            // 统一规范返回给前端的失败状态为0
            jsonResult.setCode("0");
            // 把系统中带的信息返回给前端
            jsonResult.setMsg(e.getMessage());

        } else {
            jsonResult.setCode("500");
            jsonResult.setMsg("系统开小差了，稍后再试");

            // springboot开发的程序 打成jar包  在服务器中运行
            // 挂起：nohup java -jar abcdefg.jar &
            // 把异常信息记录到nohup.out文件中
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            System.out.println("=============" + format.format(new Date()) + "===============");
            // System.out.println(e.toString()); // 异常发生原因和类型
            // 如果项目上线  可以不打印栈信息  否则会导致nohup.out文件很快变得很大
            // 开发过程中可以打印
            e.printStackTrace();
        }
        return jsonResult.getValues();
    }
}
